function shade(obj,name) {
    /// <summary>Find an object in a JSON object.</summary>
	/// <param name="obj" type="Object"> Object to search </param>
	/// <returns type="shade"></returns>
    var dataStore = new sStorage();
	dataStore.setItem(name,obj);

    var thisObj = obj;
    var currentObj = null;
    var parentObj = thisObj;
    var currentKey = null;
    var parentKey = null;
    
    function find(key, value) {
        /// <summary>Find a property's parent</summary>
        /// <param name="key" type="String"> Property name to match. </param>
        /// <param name="value" type="Object"> Property value to match </param>
	    /// <returns type="Object"> Returns the value of the 'property' property which contains a matching key/value prop. </returns>
        var ret = false;
		if (foundMatch(thisObj, key, value)) {
			ret = thisObj;
			currentObj = ret;
			parentObj = ret;
			currentKey = key;
		};
		if (false === ret) {
			var onSuccess = function (childObj, childKey, parObj) {
				var found = false;
				if (foundMatch(childObj, key, value)) {
					ret = childObj;
					currentObj = ret;
					parentObj = parObj;
					currentKey = childKey;
					found = true;
				}
				return found;
			};
			crawlObject(thisObj, onSuccess, true);
		}
        return ret;
    }
    
    function remove(key, value) {
        var onSuccess = function (childObj, childKey, parObj) {
            var deleted = false;
            if (foundMatch(childObj, key, value)) {
                deleted = true;
                delete parObj[childKey];
                currentKey = null;
                currentObj = null;
                parentObj = parentObj;
            }
            return deleted;
    	};
        return crawlObject(thisObj, onSuccess, true);
    }
    
    this.find = find;
    this.remove = remove;
    this.obj = thisObj;
    this.parentObj = parentObj;
    this.currentObj = currentObj;
    this.currentKey = currentObj;
}